package com.example.vertx.vertx_restful_web;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.MultiMap;
import io.vertx.core.Promise;
import io.vertx.core.http.HttpConnection;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;

// 关于 Vert.x 的入门示例，参考： https://vertx-china.github.io/get-started/
// Vert.x使用文档： https://vertx-china.github.io/docs/
public class MainVerticle extends AbstractVerticle {

  // 参考 https://vertx-china.github.io/docs/vertx-web/java/#_using_vert_x_web
  @Override
  public void start(Promise<Void> startPromise) throws Exception {
    // 创建一个路由器
    Router router = Router.router(vertx);

    // 注册一个路由
    router.route().handler(context -> {
      // 获取请求的连接
      HttpConnection httpConnection = context.request().connection();
      // 从连接中获取请求的远程地址
      String address = httpConnection.remoteAddress().toString();
      System.out.println("Received request from " + address);
      // 从请求中获取请求参数
      context.queryParams().forEach(param -> {
        System.out.println(param.getKey() + " = " + param.getValue());
      });

      // 获取请求参数 "name" 的取值
      MultiMap queryParams = context.queryParams();
      String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
      // 写json响应
      context.json(
        new JsonObject()
          .put("name", name)
          .put("address", address)
          .put("message", "Hello " + name + " connected from " + address)
      );
    });

    // 启动一个HTTP服务器，监听8888端口
    vertx.createHttpServer().requestHandler(request -> {
      request.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    })
      // 设置路由器，处理所有HTTP请求
      .requestHandler(router)
      // 监听8888端口
      .listen(8888)
      // 当HTTP服务器启动成功后，通知Promise 并输出日志
      .onComplete(http -> {
      if (http.succeeded()) {
        startPromise.complete();
        System.out.println("HTTP server started on port 8888");
      } else {
        startPromise.fail(http.cause());
      }
    });
  }
}
